package com.personalkeeper;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.telephony.SmsManager;

public class SMSSender {

    private final Context mContext;

    public SMSSender(Context context) {
        mContext = context;
    }

    public void sendSMS(String phoneNumber, Location location, boolean requestAnswer) {
        if (location == null && requestAnswer == false)
            throw new IllegalArgumentException("location is null and request answer is false");

        final String SENT = "SMS_SENT";
        final String DELIVERED = "SMS_DELIVERED";

        StringBuilder sb = new StringBuilder();
        sb.append(SMSReceiver.APP_NAME_HEADER + "\n");
        if (location != null) {
            sb.append(SMSReceiver.LOCATION_HEADER + "\n");
            sb.append(location.getLatitude());
            sb.append("\n");
            sb.append(location.getLongitude());
            sb.append("\n");
        }
        if (requestAnswer)
            sb.append(SMSReceiver.REQUEST_HEADER + "\n");

        String message = sb.toString();

        PendingIntent sentPI = PendingIntent.getBroadcast(mContext, 0,
                               new Intent(SENT), 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(mContext, 0,
                                    new Intent(DELIVERED), 0);
        /*
        //---when the SMS has been sent to ---
        mContext.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    //Toast.makeText(getBaseContext(), "SMS sent",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    //Toast.makeText(getBaseContext(), "Generic failure",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    //Toast.makeText(getBaseContext(), "No service",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    //Toast.makeText(getBaseContext(), "Null PDU",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    //Toast.makeText(getBaseContext(), "Radio off",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        }, new IntentFilter(SENT));

        //---when the SMS has been delivered---maybe no need
        mContext.registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context arg0, Intent arg1) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    //Toast.makeText(getBaseContext(), "SMS delivered",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    //Toast.makeText(getBaseContext(), "SMS not delivered",
                    //        Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        }, new IntentFilter(DELIVERED));
        */
        SmsManager sms = SmsManager.getDefault();
        sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
    }

}
